package UnidadeTeste;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertNull;

import java.util.List;

import fachada.Fachada;
import interfaces.IFachada;
import model.Apostador;



import org.junit.After;
import org.junit.Test;

public class ApostadorTest {
	

	List<Apostador> apostadores = fachada.listarApostadores();
	private static IFachada fachada = new Fachada();
	
	@After
	public void tearDown() throws Exception {
		List<Apostador> apostadores = fachada.listarApostadores();
		for(Apostador a : apostadores) {
			fachada.removerApostador(a);
		}
	}
	
	@Test
	public void testeSalvarApostador() throws Exception{
		assertEquals(0, fachada.listarApostadores().size());
		
		Apostador a1 = new Apostador();
		a1.setNome("jairo");
		a1.setCpf("000.000.000-00");
		a1 = fachada.salvarApostador(a1);
		
		assertEquals(1, fachada.listarApostadores().size());
		
		Apostador a2 = new Apostador();
		a2.setNome("maykel");
		a2.setCpf("000.000.000-00");
		a2 = fachada.salvarApostador(a2);
		
		assertNull(a2);
		assertNotSame(2, fachada.listarApostadores().size());
		assertEquals(1, fachada.listarApostadores().size());
	}
	
	@Test
	public void testAtualizarApostador() {
		assertEquals(0, fachada.listarApostadores().size());
		
		Apostador a1 = new Apostador();
		a1.setNome("jairo");
		a1.setCpf("000.000.000-00");
		a1 = fachada.salvarApostador(a1);
		
		assertEquals(1, fachada.listarApostadores().size());
		
		a1 = fachada.getApostadorPorCpf("000.000.000-00");
		assertNotNull(a1);
		assertEquals("jairo", a1.getNome());
		
		a1.setNome("jairo almeida");
		a1 = fachada.atualizarApostador(a1);
		assertNotNull(a1);
		assertNotSame("jairo", a1.getNome());
		assertEquals("jairo almeida", a1.getNome());
		
		Apostador a2 = new Apostador();
		a2.setNome("maykel");
		a2.setEmail("maykel@ffm.com.br");
		a2.setCpf("111.111.111-11");
		a2 = fachada.salvarApostador(a2);
		
		assertEquals(2, fachada.listarApostadores().size());
		assertNotNull(a2);
		
		assertEquals("maykel", a2.getNome());
		assertEquals("maykel@ffm.com.br", a2.getEmail());
		
		a1.setEmail("jairo@ffm.com.br");
		a1 = fachada.atualizarApostador(a1);
		assertNotNull(a1);
		assertEquals("jairo@ffm.com.br", a1.getEmail());
	}
	
	@Test
	public void testRemoverApostador() {
		Apostador a1 = new Apostador();
		a1.setNome("jairo");
		a1.setCpf("000.000.000-00");
		a1 = fachada.salvarApostador(a1);
		
		Apostador a2 = new Apostador();
		a2.setNome("maykel");
		a2.setEmail("maykel@ffm.com.br");
		a2.setCpf("111.111.111-11");
		a2 = fachada.salvarApostador(a2);
		
		assertEquals(2, fachada.listarApostadores().size());
		
		a1 = new Apostador();
		a1.setNome("jairo monteiro");
		a1.setCpf("222.222.222-22");
		a1 = fachada.salvarApostador(a1);
		
		assertEquals(3, fachada.listarApostadores().size());
		assertNotNull(a1);
		
		a1 = fachada.getApostadorPorCpf("111.111.111-11");
		assertNotNull(a1);
		fachada.removerApostador(a1);
		assertEquals(2, fachada.listarApostadores().size());
		assertNull(fachada.getApostadorPorCpf("111.111.111-11"));
		
		a1 = fachada.getApostadorPorCpf("000.000.000-00");
		fachada.removerApostador(a1);
		assertEquals(1, fachada.listarApostadores().size());
		assertNull(fachada.getApostadorPorCpf("000.000.000-00"));
		
		a1 = fachada.getApostadorPorCpf("222.222.222-22");
		fachada.removerApostador(a1);
		assertEquals(0, fachada.listarApostadores().size());
		assertNull(fachada.getApostadorPorCpf("222.222.222-22"));
	}

}
